#include "BulletDynamics/ConstraintSolver/btGearConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
btGearConstraintFloatData* bullet_NewbtGearConstraintFloatData(){
	btGearConstraintFloatData* wrap_out = new btGearConstraintFloatData();
	return wrap_out;
}

btVector3FloatData* bullet_btGearConstraintFloatData_GetFieldOfM_axisInA(btGearConstraintFloatData* c_this){
	return (btVector3FloatData*)(&c_this->m_axisInA);
}

btVector3FloatData* bullet_btGearConstraintFloatData_GetFieldOfM_axisInB(btGearConstraintFloatData* c_this){
	return (btVector3FloatData*)(&c_this->m_axisInB);
}

char** bullet_btGearConstraintFloatData_GetFieldOfM_padding(btGearConstraintFloatData* c_this){
	return (char**)(&c_this->m_padding);
}

float bullet_btGearConstraintFloatData_GetFieldOfM_ratio(btGearConstraintFloatData* c_this){
	return (float)(c_this->m_ratio);
}

btTypedConstraintFloatData* bullet_btGearConstraintFloatData_GetFieldOfM_typeConstraintData(btGearConstraintFloatData* c_this){
	return (btTypedConstraintFloatData*)(&c_this->m_typeConstraintData);
}

btGearConstraintDoubleData* bullet_NewbtGearConstraintDoubleData(){
	btGearConstraintDoubleData* wrap_out = new btGearConstraintDoubleData();
	return wrap_out;
}

btVector3DoubleData* bullet_btGearConstraintDoubleData_GetFieldOfM_axisInA(btGearConstraintDoubleData* c_this){
	return (btVector3DoubleData*)(&c_this->m_axisInA);
}

btVector3DoubleData* bullet_btGearConstraintDoubleData_GetFieldOfM_axisInB(btGearConstraintDoubleData* c_this){
	return (btVector3DoubleData*)(&c_this->m_axisInB);
}

double bullet_btGearConstraintDoubleData_GetFieldOfM_ratio(btGearConstraintDoubleData* c_this){
	return (double)(c_this->m_ratio);
}

btTypedConstraintDoubleData* bullet_btGearConstraintDoubleData_GetFieldOfM_typeConstraintData(btGearConstraintDoubleData* c_this){
	return (btTypedConstraintDoubleData*)(&c_this->m_typeConstraintData);
}

btGearConstraint* bullet_NewbtGearConstraint(btRigidBody* rbA,btRigidBody* rbB,btVector3* axisInA,btVector3* axisInB,double ratio){
	btRigidBody& c_arg_rbA=(btRigidBody&)(*rbA);
	btRigidBody& c_arg_rbB=(btRigidBody&)(*rbB);
	btVector3 const& c_arg_axisInA=(btVector3 const&)(*axisInA);
	btVector3 const& c_arg_axisInB=(btVector3 const&)(*axisInB);
	btScalar c_arg_ratio=ratio;
	btGearConstraint* wrap_out = new btGearConstraint(c_arg_rbA,c_arg_rbB,c_arg_axisInA,c_arg_axisInB,c_arg_ratio);
	return wrap_out;
}

btVector3* bullet_btGearConstraint_getAxisA(btGearConstraint* c_this){
	btVector3 const& c_out = c_this->getAxisA();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btGearConstraint_getAxisB(btGearConstraint* c_this){
	btVector3 const& c_out = c_this->getAxisB();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

double bullet_btGearConstraint_getRatio(btGearConstraint* c_this){
	btScalar c_out = c_this->getRatio();
	double wrap_out = (c_out);
	return wrap_out;
}

void bullet_btGearConstraint_setAxisA(btGearConstraint* c_this,btVector3* axisA){
	btVector3& c_arg_axisA=(btVector3&)(*axisA);
	c_this->setAxisA(c_arg_axisA);
}

void bullet_btGearConstraint_setAxisB(btGearConstraint* c_this,btVector3* axisB){
	btVector3& c_arg_axisB=(btVector3&)(*axisB);
	c_this->setAxisB(c_arg_axisB);
}

void bullet_btGearConstraint_setRatio(btGearConstraint* c_this,double ratio){
	btScalar c_arg_ratio=ratio;
	c_this->setRatio(c_arg_ratio);
}

#ifdef __cplusplus
}
#endif
